#pragma once

// ThirdParty Include
#include <cuda_runtime.h>
#include <device_launch_parameters.h>

// Local Include
#include "Utils.h"
#include "Config.h"

__constant__ float C_Kernel[KERNEL_LENGTH];
void setConvolutionKernel(float* H_Kernel);

// Function
__global__ void NaiveX(float* D_Output, const float* D_Input, const int W, const int H);
__global__ void NaiveY(float* D_Output, const float* D_Input, const int W, const int H);

// Interface
namespace ConvGPU {
	void SeparableConvX(float* D_Output, float* D_Input, const int& W, const int& H);
	void SeparableConvY(float* D_Output, float* D_Input, const int& W, const int& H);
}